/**
 * Project Name:UserService
 * File Name:UserService.java
 * Package Name:com.bwda.dsrs.systemservice.service
 * Date:2019年4月28日
 * Copyright (c) 2019, 江苏保旺达软件有限公司 All Rights Reserved.
 *
 */
package com.bwda.dsrs.systemservice.service;

import com.bwda.dsrs.systemservice.domain.exception.SystemServiceException;
import com.bwda.dsrs.systemservice.domain.form.user.*;
import com.bwda.dsrs.systemservice.domain.po.org.OrgPo;
import com.bwda.dsrs.systemservice.domain.po.role.RolePo;
import com.bwda.dsrs.systemservice.domain.po.role.UserByRolePo;
import com.bwda.dsrs.systemservice.domain.po.user.UserPo;
import com.bwda.dsrs.systemservice.domain.condition.user.UserCondition;
import com.bwda.dsrs.systemservice.domain.vo.user.UserLoginVo;

import java.util.List;
import java.util.Map;

/**
 * 用户菜单管理服务类
 *
 * @author youzhen
 * @date 2019年4月28日
 */
public interface UserService extends BaseService<UserPo, UserCondition> {
    /**
     * 根据用户code查询用户信息
     * @param userCode
     * @return
     * @throws SystemServiceException
     */
    public UserPo queryUserByUserCode(String userCode)  throws SystemServiceException;

    /**
     * 查询用户
     *
     * @param userCode user code
     * @return user po
     */
    UserPo  queryUserByUserCodeForAop(String userCode);

    /**
     * 修改
     *
     * @param ids
     * @param state
     * @return
     */
    boolean updateState(String ids,Long state);

    /**
     * 查询详情
     *
     * @param userCode
     * @return
     */
    UserQueryForm queryDetails(String userCode);
    /**
     * 密码重置
     * @param ids
     * @param password
     * @throws SystemServiceException
     * @return
     */
    void resetPassword(String ids,String password) throws SystemServiceException;

    /**
     * 添加用户
     *
     * @param userPo
     * @throws SystemServiceException
     * @return
     */
    void insertUser(UserPo userPo) throws SystemServiceException;

    /**
     * 导入用户数据
     *
     * @param userList 用户数据列表
     * @param creatUserCode
     * @param orgId
     * @return 结果
     */
    String importUser(List<UserExcelImport> userList,String creatUserCode,int orgId);

    /**
     * 添加用户角色
     *
     * @param userRoleForm
     * @return 结果
     */
    void insertRole(UserRoleForm userRoleForm);


    /**
     * 删除用户角色
     * @param userCode
     * @return 结果
     */
    int deleteRole(String userCode);

    /**
     * 更新用户密码
     * @param userPo
     */
    void updatePassword(UserPo userPo);

    /**
     * 批量删除
     * @param userId
     */
    void deleteUserByIds(String userId);

    /**
     * 组织迁移
     * @param userIds
     * @param orgId
     * @return
     */
    boolean transferUserOrg(String userIds, Integer orgId);

    /**
     * 批量查询
     * @param userCodes
     * @return
     */
    List<UserForm> queryUserByCode(String userCodes);
 /**
     * 批量查询
     * @param userCodeList
     * @return
     */
    List<UserForm> queryUserByUserCodeList(String[] userCodeList);

    /**
     * 简单查询列表
     * @author liangjy
     * @param userCondition
     * @return
     */
    List<UserPo> selectSimpleList(UserCondition userCondition);

    /**
     * 职级/头衔 记录 绑定/解绑
     * @author liangjy
     * @param userChangeLevelForm
     * @return
     */
    boolean updateLevelAndTitile(UserChangeLevelForm userChangeLevelForm);
    /**
     * 用户单表查询
     * @param userForm
     * @return
     */
    List<UserForm> queryUser(UserForm userForm);
    /**
     * 用户单表查询
     * @param userForm
     * @return
     */
    List<UserPo>queryUserForm(FileSpaceSettingQueryForm userForm);
    /**
     * 用户单表查询
     * @param userForm
     * @return int
     */
    int queryUserFormCount(FileSpaceSettingQueryForm userForm);
    /**
     * 用户单表查询
     * @param orgId
     * @return
     */
    List<UserForm> queryByOrgIdUser(Integer orgId);
    /**
     * 校验用户登录名userCode
     * @param userCode
     * @return
     */
    int checkUserCode(String userCode);
    /**
     * 获取组织管理员
     * @param userCode
     * @return
     */
    String queryOrgAdminCode(String userCode);

    /**
     * 查询当前用户等级下的用户，包括未分配用户等级的用户
     * @author yym
     * @param userCondition
     * @return
     */
    List<UserByRolePo> queryUserByIncludeLevel(UserCondition userCondition);
    /**
     * 查询当前用户等级下的用户，包括未分配用户等级的用户数量
     * @author yym
     * @param userCondition
     * @return
     */
    int queryUserByIncludeLevelCount(UserCondition userCondition);

    /**
     * 根据用户组id获取用户
     * @author yym
     * @param userCondition
     * @return
     */
    List<UserPo> queryUserByGroupId(UserCondition userCondition);
    /**
     * 根据组织id获取用户
     * @author yym
     * @param condition
     * @return
     */
    List<UserPo> queryUserByOrgId(UserCondition condition);
    /**
     * 根据组织id获取用户数量
     *
     * @param condition
     * @return
     */
    int queryUserByOrgIdCount(UserCondition condition);

    /**
     * 校验密码是否符合密码策略
     * @param confirmPwd
     * @param userCode
     * @return
     * @throws SystemServiceException
     */
    boolean checkPwdFormat(String userCode,String confirmPwd) throws SystemServiceException;
    /**
     * 校验Phone是否唯一
     *
     * @param phone
     * @param typeId
     * @param userCode
     * @return
     */
    int checkPhoneUnique(String phone,Integer typeId,String userCode);
    /**
     * 校验身份证号是否唯一
     *
     * @param idnumber
     * @param typeId
     * @param userCode
     * @return
     */
    int checkIdnumberUnique(String idnumber,Integer typeId,String userCode);
    /**
     * 校验email是否唯一
     *
     * @param email 用户信息
     * @param typeId
     * @param userCode
     * @return
     */
    int checkEmailUnique(String email,Integer typeId,String userCode);
    /**
     * 获取登陆时间
     *
     * @return
     */
    List<UserLoginVo> queryUserLoginTime();
    /**
     * 更改用户状态
     * @param userId
     * @return
     */
    void updateUserState(Integer userId);
    /**
     * 账号锁定
     * @param userCode
     * @return
     */
    UserLoginVo checkPwd(String userCode);
    /**
     * 账号锁定时间
     * @param userCode
     * @return
     */
    void updateLockDate(String userCode);

    /**
     *  查询锁定时间
     * @return
     */
    List<UserLoginVo> queryLockTime();

    /**
     * 判断用户是否是特权用户
     * @param userCode
     * @return
     */
    boolean checkUserIsTq(String userCode);

    /**
     * 查询用户分级下所有用户
     * @param var1
     * @return
     */
    List<UserPo> selectListForLevelScore(UserCondition var1);

    /**
     * 查询角色下所有用户
     * @param roleId
     * @return
     */
    List<UserPo> selectListForRoleId(Integer roleId);


}